using System.Diagnostics.CodeAnalysis;

namespace UnitTesting.Fixturing
{
	public interface IWithArgument<T>
	{
		[SuppressMessage("Microsoft.Naming", "CA1716:IdentifiersShouldNotMatchKeywords", MessageId = "With")]
		IWithArgument<T> With<TArg>(TArg argument);

		[SuppressMessage("Microsoft.Naming", "CA1716:IdentifiersShouldNotMatchKeywords", MessageId = "With")]
		IWithArgument<T> With<TArg>(string name, TArg argument);

		[SuppressMessage("Microsoft.Naming", "CA1716:IdentifiersShouldNotMatchKeywords", MessageId = "With")]
		IWithArgument<T> With<TArg>(int position, TArg argument);

		[SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "xth")]
		[SuppressMessage("Microsoft.Naming", "CA1704:IdentifiersShouldBeSpelledCorrectly", MessageId = "Xth")]
		IWithArgument<T> WithXth<TArg>(int xthTyped, TArg argument);

		IWithArgument<T> WithMany(params object[] arguments);
	}
}